home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
gnu
/
smaltalk.lha
/
smalltalk-1.1.1
/
WordMemory.st
< prev
next >
Wrap
Text File
|
1991-09-12
|
3KB
|
91 lines
"======================================================================
|
| Word oriented memory definitions
|
======================================================================"
"======================================================================
|
| Copyright (C) 1990, 1991 Free Software Foundation, Inc.
| Written by Steve Byrne.
|
| This file is part of GNU Smalltalk.
|
| GNU Smalltalk is free software; you can redistribute it and/or modify it
| under the terms of the GNU General Public License as published by the Free
| Software Foundation; either version 1, or (at your option) any later version.
|
| GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
| FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
| details.
|
| You should have received a copy of the GNU General Public License along with
| GNU Smalltalk; see the file COPYING. If not, write to the Free Software
| Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
======================================================================"
"
| Change Log
| ============================================================================
| Author Date Change
| sbyrne 29 May 89 created.
|
"
Memory variableWordSubclass: #WordMemory
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: nil.
WordMemory comment:
'I have no instances. I provide messages to my class that access real memory
as 32-bit words (well, really 31 bit integers). An alternative implementation
would be to have a single instance of word memory that represented all memory,
and at: and at:put: accessor methods, but since you''d typically refer to that
instance via a global variable, and since the global variable would probably be
named WordMemory, the actual method invocations are exactly the same in
either case.' !
!WordMemory class methodsFor: 'accessing'!
at: address
| value |
"### This is dependent on big-endian byte ordering..."
Bigendian
ifTrue:
[ value _ ByteMemory at: address.
value >= 64
ifTrue: [ ^self error: 'Word at ' ,
address radix: 8 ,
' is not representable yet' ].
address + 1 to: address + 3 do:
[ :addr | value _ value * 256 + (ByteMemory at: addr) ].
^value ]
ifFalse:
[ ^self error:
'I''m not preprared to handle little endian just yet' ].
!
at: address put: value
Bigendian
ifTrue:
[ address + 3 to: address + 1 by: -1 do:
[ :addr | ByteMemory at: addr
put: ( value \\ 256).
value _ value // 256 ].
value < 0
ifTrue: [ value _ value negated.
value _ value + 64.
ByteMemory at: address put: value ]
ifFalse: [ ByteMemory at: address put: value ] ]
ifFalse:
[ ^self error:
'I''m not preprared to handle little endian just yet' ].
!!